import type { IMarkerIconExposedProps, IPoi } from "@/common/MapTypes";
import type { Ref } from "vue";

interface IaddMarkerToMapOptions {
  onClick: (event: IMarkerIconExposedProps) => void;
}

/**
 * amapCustom 组件暴露的信息
 */
export interface AMapCustomExposed {
  /**
   * 地方搜索
   * @param value
   * @param options
   * @returns
   */
  localSearch: (
    value: string | Ref<string>,
    options: ISearchOptions
  ) => Promise<{
    status: string;
    result: {
      info: string;
      poiList: {
        count: number;
        pageIndex: number;
        pageSize: number;
        pois: IPoi[];
      };
    };
  }>;

  /**
   * 添加 Marker 到地图上
   * @param poi
   * @returns
   */
  addMarkerToMap: (poi: IPoi, options: IaddMarkerToMapOptions) => void;

  /**
   * 清空 高德在地图上渲染的搜索地址标记
   * @returns
   */
  removeSearchMarker: () => void;

  /**
   * 设置中心点
   * @param poi
   * @returns
   */
  setCenter: (poi: IPoi) => void;

  /**
   * 地图视口自适应————所有用户Marker都显示在可见范围
   * @returns
   */
  setFitView: (overlays?: [] | "all", immediately?: boolean) => void;

  /**
   * 从地图上移除 用户Marker
   * @param poi
   * @returns
   */
  delMarkerFromMap: (poi: IPoi, customize?: boolean) => void;

  /**
   * 清空地图上所有的 用户 marker
   * @returns
   */
  clearMarkers: () => void;
}

/**
 * 地方搜索的配置
 */
export interface ISearchOptions {
  /**
   * 页码，从 1 开始
   */
  pageIndex: number;

  /**
   * 每页显示的数量
   */
  pageSize: number;
}
